//
//  GDStatus.swift
//  weibo
//
//  Created by user on 15/11/29.
//  Copyright © 2015年 user. All rights reserved.
//

import UIKit

class GDStatus: NSObject {
    
    ///微博创建时间
    var created_at: String?
    
    ///微博ID
    var id: Int = 0
    
    ///微博信息内容
    var text: String?
    
    ///微博来源
    var source: String?
    
    ///微博 缩略图 图片地址数组
    var pic_urls: [[String: AnyObject]]?{
        didSet {
            if pic_urls?.count == 0 {
                return
            }
            
            //创建 pictureURLs
            storePictureURLs = [NSURL]()
            for dict in pic_urls!{
                
                //获取字典里面的图片urlString
                let urlString = dict["thumbnail_pic"] as! String
                
                //创建NSURL
                let url = NSURL(string: urlString)!
                
                //添加到pictureURLs
                storePictureURLs?.append(url)
            }
            
        }
    }
    
    ///缩略图NSURL数组
    var storePictureURLs: [NSURL]?

    ///用户模型
    var user: GDUser?
    
    ///转发数
    var reposts_count: Int = 0
    
    ///评论数
    var comments_count: Int = 0
    
    ///赞数
    var attitudes_count: Int = 0
    
    ///字典转模型
    init(dict: [String: AnyObject]) {
        super.init() // 创建对象
        
        //KVC字典转模型
        setValuesForKeysWithDictionary(dict)
    }
    
    override func setValue(value: AnyObject?, forKey key: String) {
        if key == "user" {
            if let dict = value as? [String: AnyObject] {
                //在这里字典转模型，赋值给user属性
                user = GDUser(dict: dict)
            }
            //千万要记得retu，不然会被父类从新赋值，覆盖掉了
            return
        }
        
        //调用父类的方法
        super.setValue(value, forKey: key)
    }
    /// KVC字典转模型时,字典的key在模型中找不到对应的属性时会调用,在这个方法里面可以什么都不做
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
    
    ///对象信息
    override var description: String {
        //数组存放的是需要打印的属性
        let properties = ["created_at", "id", "text", "source", "pic_urls", "reposts_count", "comments_count", "attitudes_count", "user"]
        //根据传入数组作为字典的key，value会从模型里面自动获取
        return "\n \t 微博模型: \(dictionaryWithValuesForKeys(properties))"
    }
    
    ///获取微博数据
    class func loadStatus(finished: (statuses: [GDStatus]?, error: NSError?) -> ()){
        //调用网络工具类获取数据
        GDNetworkTool.sharedInstance.loadStatus { (result, error) -> () in
            //判断是否有错误
            if error != nil || result == nil{
                //告诉调用者，出错了
                finished(statuses: nil, error: error)
                return
            }
            
            //加载到微博数据，字典转模型
            if let array = result!["statuses"] as? [[String: AnyObject]]{
                //创建一个数组来存放转好的模型
                var statuses = [GDStatus]()
                
                //遍历数组，获取里面的每一个字典
                for dict in array {
                    //字典转模型
                    let status = GDStatus(dict: dict)
                    statuses.append(status)
                }
                
                //字典转模型完成，告诉调用者，有模型数据
                finished(statuses: statuses, error: nil)
            }else{
                // 返回的数据不能字典转模型,告诉调用者,没有模型数据
                finished(statuses: nil, error: nil)
            }
        }
    }
    
}
